<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    /*
    let var 相同点：
    在全局声明的变量是全局变量，在函数内部声明的变量是局部变量
    不同点：
    1、let 声明的变量不会被提升，var 声明的变量会被提升
    2、 let 声明的变量不能重复声明，var 声明的变量可以重复声明
    3、 let 声明的变量只能在块级作用域中使用{}，var 声明的变量可以在全局作用域中使用
    4、 let 声明的变量有暂时性死区，只能在当前作用域查找
    */
    let num = 10;
    function fn() {
        let str = "str";
        // console.log(str);
        console.log(num);
    }
    fn();
    console.log(num);
    // console.log(str);
  
</script>

<script>
    //1
    console.log(demo);
    var demo = 10;
    
    let demo1 = 20;
    console.log(demo1);
</script>

<script>
    //2
    var a = 1;
    var a = 2;
    let b = 1;
    
    console.log(a); //2
    
</script>
<script>
    //3
    if(1) {
        var a1 = 100;
        let b1 = 200;
    }
    console.log(a1); //10
    console.log(b1); //报错 未定义
</script>
<script>
    //4
    var a2 = 1000;
    
    if(2) {
        console.log(a2); 
        let a2 = 100;    
    }
</script>
  <script>
    /*
     const var 区别
     1、const声明的变量必须赋初值
    2、const 声明的变量是常量，不能修改
    3、const声明的变量不会提升
    4、const 声明的变量不能重复声明
    5、const 声明的变量是块级作用域
    6、const 声明的变量有暂时性死区
    */
  </script>
  <script>
    // 1
    var d ;
    let e ;
    const f = 11 ;
  </script>

  <script>
    // 2
      const g = 100;
      g = 200;
      console.log(g);


  </script>
  <script>
    // 3
    console.log(h);
    const h = 100;
    
  </script>
  <script>
    // 5
    if(1) {   
        const b1 = 200;
        console.log(b1); 
    }
    console.log(b1); 
  </script>
  <script>
    // 6
    var a2 = 2000;  
    if(2) {
        console.log(a2); 
        const a2 = 100;    
    }
  </script>
</html>